package com.wyh.common.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;


import java.util.Date;
import java.util.UUID;

/**
 * token生成工具类
 * auth :骸音
 */
public class TokenUtils {
//    签发人
    private static final String ISSUER = "CQIE";
    private static final long TOKEN_EXPIRE_TIME = 60*60*1000;//时间戳，以毫秒计算,1小时

    private static final String JWT_KEY = "cqie";

    public static String getUUID(){
        String token = UUID.randomUUID().toString().replaceAll("-", "");
        return token;
    }


    //生成令牌
    public static String createToken(String data){

        return JWT.create()
                .withJWTId(getUUID())//这里是存入uuid作为该jwt的唯一标识
                .withClaim("data",data)//用唯一键作为data保存
                .withExpiresAt(new Date(System.currentTimeMillis()+TOKEN_EXPIRE_TIME))//过期时间
                .withIssuer(ISSUER)//签发人
                .withIssuedAt(new Date())//签发时间
                .sign(Algorithm.HMAC256(JWT_KEY));//设置token密钥，这里是把自定义的JWT_KEY，也就是私钥作为sign,在使用Security框架时无法很方便的获取密码
    }



//    验证令牌
       public static boolean verify(String token){
        try{
            Algorithm algorithm = Algorithm.HMAC256(JWT_KEY);
            JWTVerifier verifier = JWT.require(algorithm)
                    .withIssuer(ISSUER)
                    .build();//获得verifier
            DecodedJWT verify = verifier.verify(token);//验证不通过会抛出异常
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
       }


//    TODO：   解析token


}
